STM32笔记 | 您所在的位置:网站首页 › stm32 多路频率检测 › STM32笔记 |
目录 一、概述 二、输入捕获功能 2.1 输入捕获简介 2.2 输入捕获通道 三、输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法 3.2 测量过程 一、概述主要介绍通用定时器的输入捕获功能,输入信号由GPIO口进入输入捕获通道,之后输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后,一个带极性选择的边缘检测器产生一个信号(TIxFPx),它可以作为从模式控制器的输入触发或者作为捕获控制。 二、输入捕获功能 2.1 输入捕获简介 IC(Input Capture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWMI模式,同时测量频率和占空比可配合主从触发模式,实现硬件全自动测量 2.2 输入捕获通道以输入捕获通道一为例: TI1信号通过滤波器滤波得到TI1F信号,再经过带极性选择的边沿检测器,得到TI1F_Rising或者TI1F_Falling信号,经过选择器选择得到TI1FP1信号。TI1FP1、来自通道2的TI2FP1信号和来自从模式的TRC信号,经过选择器得到输入比较1信号IC1,再选择分频器分频,得到输入捕获/比较寄存器的信号IC1PS。 三、输入捕获功能测量PWM波的频率和占空比 3.1 测量频率的方法模块程序如下: #include "stm32f10x.h" void IC_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_ICInitTypeDef TIM_ICInitStruct; TIM_ICInitStruct.TIM_Channel=TIM_Channel_1; TIM_ICInitStruct.TIM_ICFilter=0xF; TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising; TIM_ICInitStruct.TIM_ICPrescaler=TIM_ICPSC_DIV1 ; TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI; TIM_PWMIConfig(TIM3,&TIM_ICInitStruct); TIM_InternalClockConfig(TIM3); TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_Period=65536-1; TIM_TimeBaseInitStruct.TIM_Prescaler=72-1; TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct); TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1); TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset); TIM_Cmd(TIM3,ENABLE); } uint32_t IC_GetFreq(void) { return 1000000/TIM_GetCapture1(TIM3); } uint32_t IC_GetDuty(void) { return TIM_GetCapture2(TIM3)*100/TIM_GetCapture1(TIM3); } |
CopyRight 2018-2019 实验室设备网 版权所有 |